package com.yhn.shortlink.common.config;

import com.yhn.shortlink.common.biz.UserTransmitFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.StringRedisTemplate;

/**
 * 用户信息传递过滤器
 *
 * @author yhn
 * @version 1.0
 * @description
 * @date 2024/7/25 14:47
 */
@Configuration
public class UserConfiguration {
    /**
     * 注册一个全局用户传输过滤器。
     * 该过滤器的作用是通过Spring Boot的过滤器机制，在每个HTTP请求中传递当前用户信息。
     * 使用StringRedisTemplate来实现用户信息的缓存和获取，提高了用户信息访问的性能。
     * @param stringRedisTemplate 提供Redis操作的模板类，用于从Redis中获取用户信息。
     * @return FilterRegistrationBean<UserTransmitFilter> 用于配置和注册过滤器的bean。
     */
    @Bean
    public FilterRegistrationBean<UserTransmitFilter> globalUserTransmitFilter(StringRedisTemplate stringRedisTemplate) {
        FilterRegistrationBean<UserTransmitFilter> registration = new FilterRegistrationBean<>();
        // 设置过滤器实例
        registration.setFilter(new UserTransmitFilter(stringRedisTemplate));
        // 将过滤器应用到所有URL路径
        registration.addUrlPatterns("/*");
        // 设置过滤器的执行顺序
        registration.setOrder(0);
        return registration;
    }

}
